// function *foo(){
//     console.log("log")
//     return 100
// }
// const result = foo()
// console.log(result.next())//{ value: 100, done: true }
// next方法的返回值与迭代器方法的返回值有相同的结构,说明 generator 也实现了 iterator接口

// function * foo(){
//     console.log(11)
//     yield 100
//     console.log(22)
//     yield 200
//     console.log(33)
//     yield 300
// }

// const result = foo()
// console.log(result.next())
// console.log(result.next())
// console.log(result.next())
// console.log(result.next())

// 生成器函数会自动返回生成器对象，调用这个对象的方法，函数体开始执行，执行过程中遇到 yield关键词暂停下来，yield后面的值会作为后面的结果返回，周而复始。
// 生成器函数最大的特点就是惰性执行。

// 使用generator 函数实现 iterator方法
const todos = {
    life:["逛淘宝","花钱","买衣服","吃小龙虾"],
    learn:["语文","数学","英语"],
    work:["喝茶"],
    [Symbol.iterator]:function * (){
        const arr = [...this.life,...this.learn,...this.work]
        for (const item of arr){
            yield item
        }
    }
}

for (const item of todos){
    console.log(item)
}